
109
Bash-скрипты, часть 9: регулярные выражения
Для того, чтобы полноценно обрабатывать тексты в bash-скриптах с помощью sed и awk, просто
необходимо разобраться с регулярными выражениями. Реализации этого полезнейшего инструмента
можно найти буквально повсюду, и хотя устроены все регулярные выражения схожим образом,
основаны на одних и тех же идеях, в разных средах работа с ними имеет определённые особенности.
Тут мы поговорим о регулярных выражениях, которые подходят для использования в сценариях
командной строки Linux.
Этот материал задуман как введение в регулярные выражения, рассчитанное на тех, кто может
совершенно не знать о том, что это такое. Поэтому начнём с самого начала.
Что такое регулярные выражения
У многих, когда они впервые видят регулярные выражения, сразу же возникает мысль, что перед ними
бессмысленное нагромождение символов. Но это, конечно, далеко не так. Взгляните, например, на это
регулярное выражение
^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$
На наш взгляд даже абсолютный новичок сходу поймёт, как оно устроено и зачем нужно :-). Если же
вам не вполне понятно — просто читайте дальше и всё встанет на свои места.
Регулярное выражение — это шаблон, пользуясь которым программы вроде sed или awk фильтруют
тексты. В шаблонах используются обычные ASCII-символы, представляющие сами себя, и так
называемые метасимволы, которые играют особую роль, например, позволяя ссылаться на некие
группы символов.
Типы регулярных выражений
Реализации регулярных выражений в различных средах, например, в языках программирования вроде
Java, Perl и Python, в инструментах Linux вроде sed, awk и grep, имеют определённые особенности. Эти
особенности зависят от так называемых движков обработки регулярных выражений, которые
занимаются интерпретацией шаблонов.
В Linux имеется два движка регулярных выражений:
● Движок, поддерживающий стандарт POSIX Basic Regular Expression (BRE).
● Движок, поддерживающий стандарт POSIX Extended Regular Expression (ERE).
Большинство утилит Linux соответствуют, как минимум, стандарту POSIX BRE, но некоторые утилиты
(в их числе — sed) понимают лишь некое подмножество стандарта BRE. Одна из причин такого
ограничения — стремление сделать такие утилиты как можно более быстрыми в деле обработки
текстов.
Стандарт POSIX ERE часто реализуют в языках программирования. Он позволяет пользоваться
большим количеством средств при разработке регулярных выражений. Например, это могут быть
специальные последовательности символов для часто используемых шаблонов, вроде поиска в тексте
отдельных слов или наборов цифр. Awk поддерживает стандарт ERE.
Существует много способов разработки регулярных выражений, зависящих и от мнения программиста,
и от особенностей движка, под который их создают. Непросто писать универсальные регулярные